package 文件io;
import java.io.*;
import java.util.*;

public class 文件File类
{
	public static void main(String[] args){
		/*
		File类
		创建对象时 File("路径")
		路径如 "c:\\windows\\system\\1.txt" 反斜杠需要转义
		      "/sdcard/1.txt" 斜杠不需转义
		 "c:"+File.separator+"1.txt"  File.separator分隔符
		*/
		File f1=new File(FilePath.PATH+"/1.txt");
		System.out.println(FilePath.PATH);
		if(!f1.exists()){//文件类对象.exists()判断文件是否存在
			try
			{
				System.out.println("不存在文件开始创建");
				f1.createNewFile();//创建新文件
			}
			catch (IOException e)
			{}
		}else{
			System.out.println("已存在文件，跳过创建");
		}
		//File.isFile() 是否是文件
		System.out.println("是否是文件夹："+f1.isDirectory());//是否是文件夹
		
		System.out.println( f1.delete());//删除文件，成功返回true，不成功返回false，如果是文件夹里面有文件删除不了
		
		File f2=new File(FilePath.PATH);
		System.out.println(Arrays.toString(f2.list()));//f2.list()列出文件夹下所有文件名
		
		File[] fs=f2.listFiles();//返回文件夹下所有文件的文件对象列表
		for(File f:fs){
			System.out.println("获取文件名:"+f.getName());
			System.out.println("获取文件长度："+f.length());
			System.out.println("获取相对路径："+f.getPath());
			System.out.println("获取可用空间："+f.getFreeSpace());
			System.out.println("获取绝对路径："+f.getAbsolutePath());
			System.out.println("是否为隐藏文件："+f.isHidden());
			System.out.println("是否可读："+f.canRead());
			System.out.println("最后修改时间(戳)："+f.lastModified());
			System.out.println("===========");
		}
		File f3=new File(".project");
		System.out.println( f3.getPath());
		System.out.println(f3.getAbsolutePath());
		
		File f4=new File(FilePath.PATH+"/test2");
		//创建文件夹，mkdir是创建单个文件夹，mkdirs创建一系列文件夹如 test1/test2/my，my文件夹夹前置的文件夹也一并创建
		if(!f4.exists()){
			System.out.println(f4.mkdir());
		}
		
		//重命名文件，如果路径改变相当于移动文件
		f4.renameTo(new File(FilePath.PATH+"/test3"));
		
		File f5=new File(FilePath.PATH);
		System.out.println(Arrays.toString( f5.list()));
		File[] files=f5.listFiles(new FileFilter(){
                //使用匿名内部类，FileFilter筛选文件
				@Override
				public boolean accept(File p1)
				{
					return p1.getName().endsWith(".txt");//返回以.txt结尾结尾的文件
				}
				
		});
		//f4.listFiles((a)->a.getName.endWith());//jdk1.8后的lambda表达式写法
		System.out.println("============");
		for(File f :files){
			System.out.println(f.getName());
		}
	}
}
